

    Observer.implement
    (
        function update (notification, sender) {}
    );
    
    function Observer () {};

    Observable.implement
    (
        
        function addObserver (value) 
        {
            if (Observer.resembles(value))
                this.observers.unshift(value);
        }
        
    ,   function removeObserver (value) 
        {
            this.observers.remove(value);
        }
        
    ,   function notifyObservers (notification) 
        {
            var observers= this.observers.concat()
            ,   observer
            ,   n= observers.length;
            
            while (n--) 
            {
                observers[n].update(notification, this);
            }
        }
    );
    
    function Observable () 
    {
        this.observers= [];
    };
    
    Mixin.implement(Observable.prototype);
    function Mixin () 
    {
        Observable.call(this);
    };
